#!/usr/bin/env node

const { spawn } = require('child_process');
const path = require('path');
const fs = require('fs');

console.log('🚀 启动电商管理后台系统...\n');

// 检查是否安装了依赖
const checkDependencies = () => {
  const frontendNodeModules = path.join(__dirname, 'node_modules');
  const backendNodeModules = path.join(__dirname, '../Backend/node_modules');

  if (!fs.existsSync(frontendNodeModules)) {
    console.log('❌ 前端依赖未安装，请先运行: npm install');
    process.exit(1);
  }

  if (!fs.existsSync(backendNodeModules)) {
    console.log('❌ 后端依赖未安装，请先在Backend目录运行: npm install');
    process.exit(1);
  }

  console.log('✅ 依赖检查通过');
};

// 启动后端服务器
const startBackend = () => {
  return new Promise((resolve, reject) => {
    console.log('🔧 启动后端服务器...');

    const backend = spawn('npm', ['start'], {
      cwd: path.join(__dirname, '../Backend'),
      stdio: 'pipe',
      shell: true
    });

    backend.stdout.on('data', (data) => {
      const output = data.toString();
      console.log(`[后端] ${output.trim()}`);

      // 检查服务器是否启动成功
      if (output.includes('服务器运行在') || output.includes('Server running')) {
        resolve(backend);
      }
    });

    backend.stderr.on('data', (data) => {
      console.error(`[后端错误] ${data.toString().trim()}`);
    });

    backend.on('error', (error) => {
      console.error('❌ 后端启动失败:', error);
      reject(error);
    });

    // 5秒后如果还没启动成功，也认为启动了（可能日志格式不同）
    setTimeout(() => {
      resolve(backend);
    }, 5000);
  });
};

// 启动前端开发服务器
const startFrontend = () => {
  return new Promise((resolve, reject) => {
    console.log('🎨 启动前端开发服务器...');

    const frontend = spawn('npm', ['run', 'dev'], {
      cwd: __dirname,
      stdio: 'pipe',
      shell: true
    });

    frontend.stdout.on('data', (data) => {
      const output = data.toString();
      console.log(`[前端] ${output.trim()}`);

      // 检查前端是否启动成功
      if (output.includes('Local:') || output.includes('localhost')) {
        resolve(frontend);
      }
    });

    frontend.stderr.on('data', (data) => {
      console.error(`[前端错误] ${data.toString().trim()}`);
    });

    frontend.on('error', (error) => {
      console.error('❌ 前端启动失败:', error);
      reject(error);
    });
  });
};

// 主函数
const main = async () => {
  try {
    checkDependencies();

    console.log('📦 正在启动服务...\n');

    // 启动后端
    const backendProcess = await startBackend();
    console.log('✅ 后端服务器启动成功\n');

    // 等待2秒让后端完全启动
    await new Promise(resolve => setTimeout(resolve, 2000));

    // 启动前端
    const frontendProcess = await startFrontend();
    console.log('✅ 前端开发服务器启动成功\n');

    console.log('🎉 系统启动完成！');
    console.log('📋 访问信息:');
    console.log('  - 前端地址: http://localhost:5014');
    console.log('  - 后端地址: http://localhost:3002');
    console.log('  - API文档: http://localhost:3002/api');
    console.log('\n🔑 测试账户:');
    console.log('  - 超级管理员: admin / admin123');
    console.log('  - 店铺老板: seller1 / seller123');
    console.log('  - 客服人员: service1 / service123');
    console.log('\n💡 提示: 按 Ctrl+C 停止所有服务');

    // 处理退出信号
    const cleanup = () => {
      console.log('\n🛑 正在停止服务...');
      backendProcess.kill();
      frontendProcess.kill();
      process.exit(0);
    };

    process.on('SIGINT', cleanup);
    process.on('SIGTERM', cleanup);

    // 保持进程运行
    await new Promise(() => { });

  } catch (error) {
    console.error('❌ 启动失败:', error);
    process.exit(1);
  }
};

// 运行主函数
main();
